package service;

import dao.FileDao;
import dao.FileMeta;
import manager.FileManager;

import java.io.File;
import java.util.List;

// 通过SearchService描述整个程序的核心业务逻辑
public class SearchService {
    // 通过fileDao针对数据库进行操作
    private FileDao fileDao = new FileDao();

    // 通过fileManager针对指定路径进行扫描操作
    private FileManager fileManager = new FileManager();

    // 使用这个thread线程周期化扫描
    private Thread thread = null;

    // 1,提供一个初始化操作
    public void init(String basePath){
        // 初始情况下，初始化数据库并进行初始扫描
        fileDao.initDB();

        // 将耗时的扫描操作放在主线程上执行会导致堵塞，解决方案：将耗时的扫描操作放到扫描线程中
        // fileManager.scanAll(new File(basePath));

        thread = new Thread(() -> {
            while (!thread.isInterrupted()){
                fileManager.scanAll(new File(basePath));
                try {
                    thread.sleep(60000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                    break;
                }
            }

        });

        thread.start();
        System.out.println("[SearchService] 初始化完成！");
    }

    // 使用该方法实现让周期扫描线程停下
    public void shutDown(){
        if(thread != null){
            thread.interrupt();
        }
    }

    // 2，提供一个查找方法,通过关键字进行查找
    public List<FileMeta> searchByPattern(String pattern){
        return fileDao.searchByPattern(pattern);
    }

    // 2，提供一个查找方法,通过关键字进行查找(针对选择了路径的情况)
    public List<FileMeta> searchByPathAndPattern(String pattern,String absolutePath){
        return fileDao.searchByPathAndPattern(pattern,absolutePath);
    }

    // 3，提供一个查找方法,通过路径进行查找
    public List<FileMeta> searchByPath(String path){
        return fileDao.searchByPath(path);
    }


}
